1. Field of the Invention
The invention relates to Asynchronous Transfer Mode (ATM) telecommunications switching. More particularly, the invention relates to a method and apparatus for managing multiple ATM cell queues in a common memory where some of the ATM cells are to be multicast.
2. State of the Art
ATM switches typically include multiple buffers, queues, or FIFOs for managing the flow of ATM cells through the switch. The buffers may be at the entry to the switch, at the exit to the switch, or between the entry and the exit of the switch. It is known from co-owned allowed application Ser. No. 08/796,085 to utilize a common memory (RAM) in which multiple queues are realized. The method used for managing multiple queues in a common RAM is known as "link list". According to the link list method of buffer management, each data element in a particular queue includes a pointer to the next consecutive element in the queue, thereby allowing a multiple queues (link lists) to be fragmented throughout a common RAM. For example, as shown in FIG. 11, a single block of RAM may contain "N" number of queues as link lists #1, #2, . . . #N. Each list may contain "n" number of data elements which are stored in the RAM in a non-contiguous manner. In order for each data element in a list to be properly associated with the other elements in the list, each element includes, in addition to the "m" number of contiguously stored words in the element, a pointer to the physical address in RAM of the next element in the list. As shown in connection with the second element of list #N in FIG. 11, elements other than the first element in the list also include a pointer to the physical address in RAM of the previous element in the list. The pointer to the previous element is used for testing or for the implementation of a LIFO buffer rather than the typical FIFO buffer.
The link list queues are managed by another list such as that shown in FIG. 12 wherein for each queue (link list), three parameters are maintained: the memory address of the first data element in the queue (head pointer), the memory address of the last data element in the queue (tail pointer), and the depth of the queue (counter). In addition, a list of free space (free list) in RAM is also maintained by storing a head pointer, a tail pointer, and a counter for the unused blocks of RAM which are available for use in queuing data elements. It will be appreciated that the unused blocks of RAM, which are not necessarily contiguous, are indexed with previous and next pointers just as the used blocks are. In this manner, multiple queues may be set up, torn down, and managed in a single common memory.
One of the desirable features of ATM is its support for multicast data transmission. Multicast data transmission is particularly useful in efficiently implementing conference calls. One method of implementing multicasting is discussed in the previously incorporated U.S. Pat. No. 5,774,465. In general, each ATM cell which is to be multicast is copied multiple times with a different address header for each copy. In an ATM switch which utilizes discrete hardware queues at the exit of the switch, the multicast cell is copied to multiple queues. In a switch utilizing link list queues at the entrance to the switch, multicasting may be more complicated.
One simple method for managing multicasting in a link list system is analogous to the method described above, i.e., each multicast data element is copied to multiple link lists. This method is easy to implement, but it makes inefficient use of the memory used to implement the queues. A possible solution to managing multicasting in a link list system is to increase the overhead for each data element in the link lists. According to this method, each data element would be provided with a header which includes information about the multiple addresses to which the data element is to be multicast. This would make more efficient use of data storage since it would not be necessary to store multiple copies of the same data. However, management of the multicast data elements with expanded header information would be complex since the status of each multicast transmission must be constantly monitored and updated. It would be very difficult to determine when all the necessary copies of the multicast cell have been sent and thus when cell buffer space can be freed. Further, as the number of multicast destinations increases, the amount of overhead per data element may exceed the size of the data element.